﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Utilities.QuickSql;
using MySql.Data;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;
using System.Data;
using System.IO;

namespace Deviseur_Cs2i_Car
{
    class VOITURE
    {       
        int NumVoiture;
        int NbPortes;
        string NomVoiture;
        double PrixbaseVoiture;

        COULEURCAROSS CouleurCaross = new COULEURCAROSS();
        TYPE Type = new TYPE();
        List<MOTORISATION> TabMotorisation = new List<MOTORISATION>();
        List<OPTION> TabOption = new List<OPTION>();

        string image;

        public VOITURE()
        {

        }
        public VOITURE(string NomVoiture, int porte, double PrixbaseVoi, int numc, int numt)
        {
            this.NomVoiture = NomVoiture;
            this.PrixbaseVoiture = PrixbaseVoi;
            this.CouleurCaross.set_NumCouleurCaross(numc);
            this.Type.set_NumType(numt);
            this.NbPortes = porte;
        }
        public VOITURE(int NumVoiture, string NomVoiture, int porte, double PrixbaseVoi, int numc, int numt)
        {
            
            this.NumVoiture = NumVoiture;
            this.NomVoiture = NomVoiture;
            this.PrixbaseVoiture = PrixbaseVoi;
            this.CouleurCaross.set_NumCouleurCaross(numc);
            this.Type.set_NumType(numt);
            this.NbPortes = porte;
        }

        public int get_NumVoiture()
        {
            return this.NumVoiture;
        }
        public int get_NbPortes()
        {
            return this.NbPortes;
        }
        public string get_NomVoiture()
        {
            return this.NomVoiture;
        }
        public double get_PrixbaseVoiture()
        {
            return this.PrixbaseVoiture;
        }
        public COULEURCAROSS get_CouleurCaross()
        {
            return this.CouleurCaross;
        }
        public TYPE get_Type()
        {
            return this.Type;
        }
        public OPTION get_Option(int i)
        {
            return this.TabOption[i];
        }
        public MOTORISATION get_Motorisation(int i)
        {
            return this.TabMotorisation[i];
        }
        public void set_Option(OPTION option, int i)
        {
            this.TabOption[i] = option;
        }
        public void set_Motorisation(MOTORISATION motor, int i)
        {
            this.TabMotorisation[i] = motor;
        }
        public void set_Type(TYPE t)
        {
            this.Type = t;
        }
        public void set_CouleurCaross(COULEURCAROSS c)
        {
            this.CouleurCaross = c;
        }
        public void set_NumVoiture(int NumVoiture)
        {
            this.NumVoiture = NumVoiture;
        }
        public void set_NomVoiture(string NomVoiture)
        {
            this.NomVoiture = NomVoiture;
        }
        public void set_PrixbaseVoiture(double PrixbaseVoiture)
        {
            this.PrixbaseVoiture = PrixbaseVoiture;
        }
        public void set_NbPortes(int NbPortes)
        {
            this.NbPortes = NbPortes;
        }
        public void set_Image(string _image)
        {
            this.image = _image;
        }

        public void affiche_HTDI()
        {
            Console.WriteLine("Num Voiture : ", this.NumVoiture);
            Console.WriteLine("Nom Voiture : ", this.NomVoiture);
            Console.WriteLine("Prix de base Voiture : ", this.PrixbaseVoiture);
            Console.WriteLine("Nombre de portes Voiture : ", this.NbPortes);
        }
        public void new_Voiture()
        {
            string ConnnectionStr = "Database=" + Program.Database + ";Data Source=" + Program.Address + ";Port=" + Program.Port + ";User Id=" + Program.Login + ";Password=" + Program.Password;

            FileStream fs = new FileStream(this.image, FileMode.Open, FileAccess.Read);

            int fileLength = (int)fs.Length;

            byte[] rawdata = new byte[fileLength];

            fs.Read(rawdata, 0, (int)fileLength);

            MySqlCommand cmd = new MySqlCommand();

            String sql = "INSERT INTO VOITURE (NomVoi,NbPortes, PrixbaseVoi, NumCouleurCaross, NumType, ImageVoi) VALUES ('" + this.NomVoiture + "'," + this.NbPortes + ", " + this.PrixbaseVoiture + ", " + this.CouleurCaross.get_NumCouleurCaross() + ", " + this.Type.get_NumType() + ", @Image)";

            cmd.Connection = new MySqlConnection(ConnnectionStr);
            cmd.Connection.Open();

            cmd.CommandText = sql;

            cmd.Parameters.AddWithValue("@Image", rawdata);
 
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();

            fs.Close();
        }
        public void modify_Voiture()
        {
            Program.Db.Execute("UPDATE VOITURE SET NomVoi = '" + this.NomVoiture + "', NbPortes = '" + this.NbPortes + "', PrixbaseVoi = '" + this.PrixbaseVoiture + "', NumCouleurCaross = '" + this.CouleurCaross.get_NumCouleurCaross() + "', NumType = '" + this.Type.get_NumType() + "' WHERE NumVoi = " + this.NumVoiture);
        }
        public void delete_Voiture(int NumVoiture)
        {
            Program.Db.Execute("DELETE FROM VOITURE WHERE NumVoi = " + NumVoiture);            
        }
    }
}
